package com.hlf.common.utils.sdlSpd;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hlf.common.exception.BusinessException;
import com.hlf.common.utils.MD5Util;
import com.hlf.common.utils.RESTfulSDLHttpUtils;
import com.hlf.modules.merchant.store.constant.XdLSpdbConstants;
import com.hlf.modules.merchant.store.entity.XdLInfo;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

public class XDLImgUtil {
    public static byte[] readInputStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        //创建一个Buffer字符串  
        byte[] buffer = new byte[1024];  
        //每次读取的字符串长度，如果为-1，代表全部读取完毕  
        int len = 0;  
        //使用一个输入流从buffer里把数据读取出来  
        while( (len=inStream.read(buffer)) != -1 ){  
            //用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度  
            outStream.write(buffer, 0, len);  
        }  
        //关闭输入流  
        inStream.close();  
        //把outStream里的数据写入内存  
        return outStream.toByteArray();  
    }  
    public static String readOutputStream(String ur) throws Exception{
        StringBuilder stringBuilder = new StringBuilder("");   
        //new一个URL对象  
        URL url = new URL(ur);
        //打开链接  
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //设置请求方式为"GET"  
        conn.setRequestMethod("GET");  
        //超时响应时间为5秒  
        conn.setConnectTimeout(5 * 1000);  
        //通过输入流获取图片数据  
        InputStream inStream = conn.getInputStream();  
        //得到图片的二进制数据，以二进制封装得到数据，具有通用性  
        byte[] data = readInputStream(inStream);       //new一个文件对象用来保存图片，默认保存当前工程根目录  
/*        File imageFile = new File("C:/img.jpg"); 
        //创建输出流  
        FileOutputStream outStream = new FileOutputStream(imageFile);  
        //写入数据  
        outStream.write(data);  
        //关闭输出流  
        outStream.close();     */   
        if (data == null || data.length <= 0) {   
            System.out.println("ffff");;   
        }   
        for (int i = 0; i < data.length; i++) {   
            int v = data[i] & 0xFF;   
            String hv = Integer.toHexString(v);   
            if (hv.length() < 2) {   
                stringBuilder.append(0);   
            }   
            stringBuilder.append(hv);   
        }   
        String reString = stringBuilder.toString();
        System.out.println(reString);
        return reString;                                         
    }
    
    public static String upLoadImg(XdLInfo xdLInfo, String url, String imgTyp, String imgNm) throws Exception{
        JSONObject obj = new JSONObject(); 
        obj.put("serviceId","6060606");  // 1   String  7   交易码 6060601
        obj.put("orgNo", XdLSpdbConstants.REPORT_ORGNO);  //  //   1   String  6   机构号 合作商机构号
        obj.put("log_no",xdLInfo.getLogNo());
        obj.put("version","V1.0.1");
        obj.put("stoe_id",xdLInfo.getStoeId());
        obj.put("mercId",xdLInfo.getMercId());
        obj.put("imgTyp",imgTyp);
        obj.put("imgNm",imgNm);
        String string1 = "";
        Collection<String> keyset = obj.keySet();
        List list = new ArrayList<String>(keyset);
        Collections.sort(list);
        //这种打印出的字符串顺序和微信官网提供的字典序顺序是一致的
        for (int i = 0; i < list.size(); i++) {
                string1 = string1 + obj.get(list.get(i)); 
               
        }
        String do_sign = string1 + XdLSpdbConstants.SECRET_KEY;
        System.out.println(do_sign);
        //md5加密 并转成小写
        String sign = MD5Util.MD5Encode(do_sign, "utf-8").toLowerCase(); //
        obj.put("signValue", sign);// MD5加密          
        String imgFile = readOutputStream(url);
        obj.put("imgFile", imgFile);// MD5加密  
        String content = obj.toString();   
        String returnstr = RESTfulSDLHttpUtils.sendPost(XdLSpdbConstants.REPORT_URL, content);
         JSONObject json = JSON.parseObject(returnstr);
        String  code = json.getString("msg_cd");
        String jsonMessage = "";
           if("000000".equals(code)){
               jsonMessage = json.getString("msg_dat");  
           }else{
               throw new BusinessException(json.getString("msg_dat"));
           }
        return jsonMessage;
    }
}
